home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 June / Macworld (1999-06).dmg / Shareware World / Info / For Developers / MacZoop2.0.sea / MacZoop2.0 / Required Classes / ZWindow.h < prev    next >
Text File  |  1999-02-24  |  9KB  |  280 lines

  1. /*************************************************************************************************
  2. *
  3. *
  4. *            MacZoop - "the framework for the rest of us"         
  5. *
  6. *
  7. *
  8. *            ZWindow.h        -- the window object
  9. *
  10. *
  11. *
  12. *
  13. *
  14. *            © 1996, Graham Cox
  15. *
  16. *
  17. *
  18. *
  19. *************************************************************************************************/
  20.  
  21. #pragma once
  22.  
  23. #ifndef __ZWINDOW__
  24. #define    __ZWINDOW__
  25.  
  26. #ifndef __ZCOMMANDER__
  27. #include    "ZCommander.h"
  28. #endif
  29.  
  30. class    ZUndoTask;
  31. class    ZWindowManager;
  32.  
  33. #include    "ProjectSettings.h"
  34. #include    <drag.h>
  35.  
  36. #if _USE_NAVIGATION_SERVICES
  37. #include    <Navigation.h>
  38. extern NavEventUPP        gNavEventHandler;
  39. #endif
  40.  
  41. typedef enum
  42. {
  43.     kNoPosition,
  44.     kCentreOnParent,
  45.     kAlertPositionOnParent,
  46.     kStaggerOnParent,
  47.     kCentreOnScreen,
  48.     kAlertPositionOnScreen,
  49.     kStaggerOnScreen,
  50.     kCentreOnParentScreen,
  51.     kAlertOnParentScreen,
  52.     kStaggerOnParentScreen
  53. }
  54. WindowPlacing;
  55.  
  56. // set up streaming stuff:
  57.  
  58. DEFINECLASSID( ZWindow, 'zwin' );
  59.  
  60. // class definition:
  61.  
  62. class    ZWindow : public ZCommander
  63. {
  64.     friend class ZWindowManager;
  65.     
  66. protected:
  67.     Rect        sizeRect;            // min and max sizes for window
  68.     WindowPtr    macWindow;            // the mac window associated with this object
  69.     short        windID;                // res ID of 'WIND' template
  70.     Boolean        dirty;                // TRUE if window needs to be saved
  71.     Boolean        isNamed;            // TRUE if window has a name other than "untitled"
  72.     Boolean        stationeryFile;        // TRUE if file opened was  stationery (template)
  73.     FSSpec        macFile;            // the file that corresponds to this window
  74.     OSType        macFType;            // file type last opened
  75.     Boolean        printable;            // TRUE if this window can be printed (default FALSE)
  76.     Boolean        isPrinting;            // TRUE if draw operation is to printer
  77.     Boolean        floating;            // TRUE if this is a floating window
  78.     Boolean        disableAutoClose;    // if TRUE, this window is skipped during Quit or Close All
  79.     Rect        zoomSource;            // global rect where window was zoomed from
  80.     RGBColor    winBackColour;        // original window background colour
  81.     
  82. public:
  83.     ZWindow( ZCommander* aBoss, const short windowID );
  84.     ZWindow();
  85.     virtual ~ZWindow();
  86.  
  87. // initialisation (MUST be called after construction)    
  88.     virtual void        InitZWindow();
  89.     
  90. // drawing and clicking
  91.     virtual void        Focus();
  92.     virtual void        Draw();
  93.     virtual void        DrawGrow();
  94.     virtual void        Click( const Point mouse, const short modifiers);
  95.     virtual void        AdjustCursor( const Point mouse, const short modifiers);
  96.     virtual void        PostRefresh();
  97.     virtual void        PostRefresh( Rect* aRect );
  98.     virtual Boolean        ClickInSamePlace( const Point click1, const Point click2 );
  99.     virtual void        SetDefaultColours();
  100.     
  101. // top-level call to do an update
  102.  
  103.     virtual void        PerformUpdate();
  104.     
  105. // window state manipulation
  106.     virtual void        Hide();
  107.     virtual void        Show();
  108.     virtual void        Select();
  109.     virtual void        Activate();
  110.     virtual void        Deactivate();
  111.     virtual Boolean        Close( const short phase );
  112.     virtual Boolean        CloseSubsidiaryWindows( const short phase );
  113.     virtual void        SendBehind( ZWindow* aWindow = NULL );
  114.     
  115. // command handling
  116.     virtual void        HandleCommand( const long aCmd );
  117.     virtual void        HandleCommand( const short menuID, const short itemID );
  118.     virtual void        UpdateMenus();
  119.     virtual void        SetTask( ZUndoTask* aTask );
  120.     
  121. // sizing and zooming    
  122.     virtual void        SetSizeRect( const Rect& szRect );
  123.     virtual void        GetSizeRect( Rect* szRect );
  124.     virtual void        Zoom( const short partCode );
  125.     virtual void        PlaceAt( const short hGlobal, const short vGlobal );
  126.     virtual void        Place();
  127.     virtual void        PlaceRelative( ZWindow* relWindow, WindowPlacing aPlacing );
  128.     
  129.     virtual void        SetSize( const short width, const short height, const Boolean reDraw );
  130.     virtual void        SetSize( const short width, const short height ) { SetSize(width, height, TRUE); };
  131.     virtual void        SetStdZoomRect( const Rect& aRect );
  132.     virtual void        SetUserZoomRect( const Rect& aRect );
  133.     virtual void        GetIdealWindowZoomSize( Rect* idealSize );
  134.     virtual void        WindowResized() {};
  135.     
  136. // file handling
  137.     virtual Boolean        Save( const Boolean forceSaveAs = FALSE );
  138.     virtual void        SaveFile();
  139.     virtual void        Revert();
  140.     virtual void        SetFile( const FSSpec& aFile );
  141.     virtual void        OpenFile( const OSType aFileType, Boolean isStationery = FALSE );
  142.     virtual void        PickFile( StandardFileReply* macReply );
  143.     
  144. #if _USE_NAVIGATION_SERVICES
  145.     virtual void        PickFile( NavReplyRecord* navReply );
  146. #endif
  147.     
  148. // print handling
  149.     virtual void        CalcPages( const Rect& paperRect, short* pagesH, short* pagesV );
  150.     virtual void        PrintOnePage( const short pageNum, const Rect& paperRect );
  151.     virtual void        PrintingStarting() { isPrinting = TRUE; };
  152.     virtual void        PrintingFinishing() { isPrinting = FALSE; };
  153.     
  154.     inline    Boolean        IsPrintable() { return printable; };
  155.     
  156. // other info
  157.     virtual void        SetTitle( Str255 aTitle );
  158.     virtual void        GetName( Str255 name );
  159.     virtual void        GetContentRect( Rect* contents );
  160.     virtual void        GetBounds( Rect* aBounds ) { GetContentRect( aBounds ); };
  161.     virtual Boolean        IsVisible();
  162.     virtual Boolean        IsActive();
  163.  
  164. // positioning and frame info:    
  165.     virtual short        GetTitleBarHeight();
  166.     virtual void        GetStructureRegion( RgnHandle aRgn );
  167.     virtual void        GetContentRegion( RgnHandle aRgn );
  168.     virtual void        GetStructureFrameBorder( Rect* aRect );
  169.     virtual void        GetGlobalPosition( short* hGlobal, short* vGlobal );
  170.  
  171. // saving and restoring window position as resource in file or prefs:
  172.     
  173.     virtual void        SavePosition( short id = 0 );
  174.     virtual void        RestorePosition( short id = 0 );
  175.  
  176. // various inline getters & setters    
  177.     inline     WindowPtr    GetMacWindow(){ return macWindow; };
  178.     inline    Boolean        Floats() { return floating; };
  179.     inline    Boolean        NoAutoClose() { return disableAutoClose; };
  180.     inline    void        GetFileSpec( FSSpec* aSpec ) { *aSpec = macFile; };
  181.     inline  Boolean        IsDirty() { return dirty; };
  182.     inline    void        SetDirty( Boolean dState ) { dirty = dState; };
  183.     inline  OSType        GetFileType() { return macFType; };
  184.     inline  void        GetBackColour( RGBColor* aColour ) { *aColour = winBackColour; };
  185.     
  186. // streaming:
  187.  
  188.     virtual void        WriteToStream( ZStream* aStream );
  189.     virtual void        ReadFromStream( ZStream* aStream );
  190.  
  191. // drag and drop support:
  192.     
  193.     virtual Boolean        Drag( const Point startPt );
  194.     virtual void        Drop( const OSType flavour, const Ptr data, const long dataSize, const DragReference theDrag = NULL ) {};
  195.     virtual void        DragHilite( const Boolean state, const DragReference theDrag );
  196.     virtual Boolean        AcceptsFlavour( const OSType aFlavour ) { return TRUE; };
  197.     virtual RgnHandle    MakeDragRgn();
  198.     virtual void        MakeDragData( const DragReference theDrag ) {};
  199.     
  200. // lowest level d+d handlers:
  201.  
  202.     virtual void        DragDispatch( const DragTrackingMessage theMessage, const DragReference theDrag);
  203.     virtual void        DropHandler( const DragReference theDrag );
  204.     
  205. // help:
  206.  
  207.     virtual void        ShowBalloonHelp( Rect* localRect, Point tip, HMMessageRecord* hm );
  208.  
  209. protected:
  210.  
  211. // user methods    
  212.     virtual void        DrawContent();
  213.  
  214. // d+d installers
  215.     
  216.     virtual void        InstallDragHandlers();
  217.     virtual void        RemoveDragHandlers();
  218.     
  219. // tracking handler methods
  220.     
  221.     virtual void        EnteredHandler( const DragReference theDrag) {};
  222.     virtual void        EnteredWindow( const DragReference theDrag);
  223.     virtual void        InWindow( const DragReference theDrag) {};
  224.     virtual void        LeftWindow( const DragReference theDrag);
  225.     virtual void        LeftHandler( const DragReference theDrag) {};
  226.  
  227. // constructing mac windows:
  228.     
  229.     virtual void        MakeMacWindow( const short windID );
  230.     virtual void        MakeMacWindow( Rect* aRect, Str255 title, Boolean visible = FALSE, short varCode = 0, Boolean hasCloseBox = FALSE, void* userData = NULL );
  231. };
  232.  
  233.  
  234.  
  235. #define            kNoFile                    -9999
  236. #define            kRevertConfirmAlertID    135
  237.  
  238. #define            kMsgWindowClosing        'winz'
  239.  
  240.  
  241. /*
  242.  
  243.      ZWindows manage Mac windows. The refCon of a macWindow in MacZoop is the object
  244.     reference. This class handles all types of non-dialog windows. For dialogs, use ZDialog,
  245.     which is a subclass of this. A ZWindow is really equivalent to a document, since it has
  246.     methods for reading and writing its contents to files. However, you can ignore this
  247.     facility for non-document windows. This approach simplifies the framework, since you don't
  248.     need separate classes for different types of windows.
  249.     
  250. */
  251.  
  252.  
  253. #define        kInfinityWindoidDefinition    128
  254.  
  255. // structure of "WIND' resource- we need to take a peek here ourselves to determine if the
  256. // window is a floater or not
  257.  
  258. #if PRAGMA_ALIGN_SUPPORTED
  259. #pragma options align=mac68k
  260. #endif
  261.  
  262.  
  263. typedef struct
  264. {
  265.     Rect        bounds;
  266.     short        procID;
  267.     short        filler;
  268.     Boolean        visible;
  269.     Boolean        goAway;
  270.     long        refCon;
  271.     Str255        title;
  272. }
  273. WindTemplate, *WindTemplatePtr, **WindTemplateHdl;
  274.  
  275.  
  276. #if PRAGMA_ALIGN_SUPPORTED
  277. #pragma options align=reset
  278. #endif
  279.  
  280. #endif